
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Swagger UI</title>
  <link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32" />
  <link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16" />
  <link href='css/typography.css' media='screen' rel='stylesheet' type='text/css'/>
  <link href='css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
  <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
  <link href='css/reset.css' media='print' rel='stylesheet' type='text/css'/>
  <link href='css/print.css' media='print' rel='stylesheet' type='text/css'/>
  <script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>
  <script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
  <script src='lib/jquery.wiggle.min.js' type='text/javascript'></script>
  <script src='lib/jquery.ba-bbq.min.js' type='text/javascript'></script>
  <script src='lib/handlebars-2.0.0.js' type='text/javascript'></script>
  <script src='lib/underscore-min.js' type='text/javascript'></script>
  <script src='lib/backbone-min.js' type='text/javascript'></script>
  <script src='swagger-ui.js' type='text/javascript'></script>
  <script src='lib/highlight.7.3.pack.js' type='text/javascript'></script>
  <script src='lib/jsoneditor.min.js' type='text/javascript'></script>
  <script src='lib/marked.js' type='text/javascript'></script>
  <script src='lib/swagger-oauth.js' type='text/javascript'></script>

  <!-- Some basic translations -->
  <!-- <script src='lang/translator.js' type='text/javascript'></script> -->
  <!-- <script src='lang/ru.js' type='text/javascript'></script> -->
  <!-- <script src='lang/en.js' type='text/javascript'></script> -->

  <script type="text/javascript">
    $(function () {
      var url = window.location.search.match(/url=([^&]+)/);
      if (url && url.length > 1) {
        url = decodeURIComponent(url[1]);
      } else {
        url = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '') + '/api/docs/swagger.json';
      }

      // Pre load translate...
      if(window.SwaggerTranslator) {
        window.SwaggerTranslator.translate();
      }
      window.swaggerUi = new SwaggerUi({
        url: url,
        dom_id: "swagger-ui-container",
        supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
        onComplete: function(swaggerApi, swaggerUi){
          if(typeof initOAuth == "function") {
            initOAuth({
              clientId: "your-client-id",
              clientSecret: "your-client-secret-if-required",
              realm: "your-realms",
              appName: "your-app-name",
              scopeSeparator: ",",
              additionalQueryStringParams: {}
            });
          }

          if(window.SwaggerTranslator) {
            window.SwaggerTranslator.translate();
          }

          $('pre code').each(function(i, e) {
            hljs.highlightBlock(e)
          });

          addMachineTokenAuthorization();
          addCsrfAuthorization();
          addKeycloakAuthorization();
        },
        onFailure: function(data) {
          log("Unable to Load SwaggerUI");
        },
        docExpansion: "none",
        jsonEditor: false,
        apisSorter: "alpha",
        defaultModelRendering: 'schema',
        showRequestHeaders: false
      });

      function addApiKeyAuthorization(){
        var key = encodeURIComponent($('#input_apiKey')[0].value);
        if(key && key.trim() != "") {
            var apiKeyAuth = new SwaggerClient.ApiKeyAuthorization("api_key", key, "query");
            window.swaggerUi.api.clientAuthorizations.add("api_key", apiKeyAuth);
            log("added key " + key);
        }
      }

      function addCsrfAuthorization() {
        $.ajax({
       	  url : "/api/profile",
          beforeSend: function(xhr) { xhr.setRequestHeader("X-CSRF-Token", "Fetch"); },
          complete: function(xhr) {
            var csrfToken = xhr.getResponseHeader("X-CSRF-Token");
            if (csrfToken) {
              window.swaggerUi.api.clientAuthorizations.add("csrf", new SwaggerClient.ApiKeyAuthorization("X-CSRF-Token", csrfToken, "header"));
            } else {
              console.log("Warn! Could not fetch X-CSRF-Token, all modifying requests won't include it!");
            }
          }
        });
      }

      function addKeycloakAuthorization() {
        $.when(initializeKeycloak()).then(function(keycloak) {
          window.swaggerUi.api.clientAuthorizations.add("keycloak", new SwaggerClient.KeycloakAuthorization(keycloak));
        });
      }

      function addMachineTokenAuthorization(){
        var key = encodeURIComponent($('#input_apiKey')[0].value);
        if(key && key.trim() != "") {
          var machineTokenAuth = new SwaggerClient.ApiKeyAuthorization("token", key, "query");
          window.swaggerUi.api.clientAuthorizations.add("machine_token", machineTokenAuth);
          log("added machine token " + key);
        }
      }

      $('#input_apiKey').change(addMachineTokenAuthorization);

      // if you have an apiKey you would like to pre-populate on the page for demonstration purposes...
      /*
        var apiKey = "myApiKeyXXXX123456789";
        $('#input_apiKey').val(apiKey);
      */

      window.swaggerUi.load();

      function log() {
        if ('console' in window) {
          console.log.apply(console, arguments);
        }
      }

      function initializeKeycloak() {
        var deferred = $.Deferred();
        if (this.keycloak) {
          return deferred.resolve(keycloak);
        } else {
          $.when(getKeycloakConfiguration()).done(function(data) {
            const script = document.createElement('script');
            script.async = true;
            script.src = keycloakSettings.url + "/js/keycloak.js";
            script.onload = function () {
              this.keycloak = Keycloak(keycloakSettings);
              this.keycloak.init({
                onLoad: 'login-required', checkLoginIframe: false
              }).success(function (authenticated) {
                deferred.resolve(this.keycloak);
              }.bind(this)).error(function () {
                console.log("Failed to load Keycloak script");
                deferred.reject();
              });
            }.bind(this);
            document.head.appendChild(script);
          }.bind(this));
          return deferred.promise();
        }
      }
      
      function getKeycloakConfiguration() {
        var deferred = $.Deferred();
        $.ajax({
          url : "/api/keycloak/settings",
          dataType: "json",
          success: function(data) {
            keycloakSettings = {
              url: data['che.keycloak.auth_server_url'],
              realm: data['che.keycloak.realm'],
              clientId: data['che.keycloak.client_id']
            };
            deferred.resolve(keycloakSettings);
          },
          error: function () {
            deferred.reject();
          }
        });
        return deferred.promise();
      }
    });
  </script>
</head>

<body class="swagger-section">
<div id='header'>
  <div class="swagger-ui-wrap">
    <a id="logo" href="http://swagger.io"></a>
    <form id='api_selector'>
      <div class='input'><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text"/></div>
      <div class='input'><input placeholder="token" id="input_apiKey" name="apiKey" type="text"/></div>
      <div class='input'><a id="explore" href="#" data-sw-translate>Explore</a></div>
    </form>
  </div>
</div>

<div id="message-bar" class="swagger-ui-wrap" data-sw-translate>&nbsp;</div>
<div id="swagger-ui-container" class="swagger-ui-wrap"></div>
</body>
</html>
